1 package uba.db.sql.interpreter.sentencevalidation;
2
3 import java.util.HashSet;
4 import java.util.Iterator;
5 import java.util.List;
6 import java.util.Set;
7
8 import uba.db.Database;
9 import uba.db.UnknowTableName;
10 import uba.db.sql.language.Sentence;
11 import uba.db.table.Table;
12
13 /***
14 * @version $Revision: 1.1 $
15 */
16 public class SentenceValidator {
17 private Database database;
18 private Set referencedTables;
19 private List validations;
20
21 public SentenceValidator(Sentence sentence, Database database) {
22 this.database = database;
23 this.referencedTables = new HashSet();
24 initializeValidationsFor(sentence);
25 }
26
27 private void initializeValidationsFor(Sentence sentence) {
28 ValidationSetUpVisitor validationSetUpVisitor = new ValidationSetUpVisitor(
29 sentence, this);
30 sentence.accept(validationSetUpVisitor);
31 validations = validationSetUpVisitor.validations();
32 }
33
34 public void addReferencedTableNamed(String tableName) throws UnknowTableName {
35 Table table = database.tableNamed(tableName);
36 referencedTables.add(table);
37 }
38
39 public boolean isExistantTableName(String tableName) {
40 return database.containsTableNamed(tableName);
41 }
42 public Set findReferencedTablesWithColumnNamed(String columnName) {
43 Iterator iterator = referencedTables.iterator();
44 Set result = new HashSet();
45
46 while (iterator.hasNext()) {
47 Table table = (Table) iterator.next();
48 if (table.columnNamed(columnName) != null) {
49 result.add(table);
50 }
51 }
52
53 return result;
54 }
55
56 public void execute() throws SentenceValidationException {
57 Iterator iter = validations.iterator();
58 while (iter.hasNext()) {
59 ((SentenceValidationBehavior) iter.next()).execute();
60 }
61 }
62 }